package ar.com.jsejtman.cajugastos2.core.entity;

import ar.com.jsejtman.common.domain.entity.Identifiable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 * Representa los lugares donde se realizan los gastos.
 * 
 * @author jsejtman
 * 
 */
@Entity
@Table(name = "LUGARES")
public class Lugar implements Identifiable<Long> {

	/**
	 * Identificador.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private Long id;
	/**
	 * Descripcion.
	 */
	@Column(name = "DESCRIPCION", unique = true, nullable = false)
	private String descripcion;
	/**
	 * Categoria.
	 */
	@ManyToOne
	@JoinColumn(name = "CATEGORIA_ID", nullable = false)
	private Categoria categoria;

	/**
	 * Versión de la entidad.
	 */
	@Column(name = "VERSION")
	@Version
	private Long version;

	/**
	 * Devuelve el valor de id.
	 * 
	 * @return El valor de id.
	 */
	public final Long getId() {

		return this.id;
	}

	/**
	 * Asigna un nuevo valor a id.
	 * 
	 * @param id El valor a asignar a id.
	 */
	public final void setId(final Long id) {

		this.id = id;
	}

	/**
	 * Devuelve el valor de descripcion.
	 * 
	 * @return El valor de descripcion.
	 */
	public final String getDescripcion() {

		return this.descripcion;
	}

	/**
	 * Asigna un nuevo valor a descripcion.
	 * 
	 * @param descripcion El valor a asignar a descripcion.
	 */
	public final void setDescripcion(final String descripcion) {

		this.descripcion = descripcion;
	}

	/**
	 * Devuelve el valor de categoria.
	 * 
	 * @return El valor de categoria.
	 */
	public final Categoria getCategoria() {

		return this.categoria;
	}

	/**
	 * Asigna un nuevo valor a categoria.
	 * 
	 * @param categoria El valor a asignar a categoria.
	 */
	public final void setCategoria(final Categoria categoria) {

		this.categoria = categoria;
	}

	/**
	 * Devuelve el valor de version.
	 * 
	 * @return El valor de version.
	 */
	public final Long getVersion() {

		return this.version;
	}

	/**
	 * Asigna un nuevo valor a version.
	 * 
	 * @param version El valor a asignar a version.
	 */
	public final void setVersion(final Long version) {

		this.version = version;
	}

}
